#include "day.h"


#include <QFont>
#include <QPoint>
#include <QPen>
#include <QBrush>



#include <QHBoxLayout>
#include <QVBoxLayout>
Day::Day(QWidget *parent): QWidget(parent)
{
    color = QColor (204, 235, 255);

    // 创建水平布局来放置7天的天气信息
    QHBoxLayout *mainLayout = new QHBoxLayout(this);

    dayLabels.clear();
    tempLabels.clear();
    iconLabels.clear();
    dayWidgets.clear();

    for(int i = 0; i < 7; i++) {
        // 为每一天创建一个垂直布局容器
        Widget_class* dayWidget = new Widget_class(this);
        dayWidgets.append(dayWidget); // 添加到天的容器

        QVBoxLayout *dayLayout = new QVBoxLayout(dayWidget);
        dayLayout->setAlignment(Qt::AlignCenter);

        // 创建日期标签
        QLabel *dayLabel = new QLabel( dayWidget);
        dayLabel->setAlignment(Qt::AlignCenter);
        dayLabels.append(dayLabel); // 添加到日期标签容器

        // 创建温度标签
        QLabel *tempLabel = new QLabel(dayWidget); // 默认温度
        tempLabel->setAlignment(Qt::AlignCenter);
        tempLabels.append(tempLabel); // 添加到温度标签容器

        // 创建天气图标标签
        QLabel *iconLabel = new QLabel(dayWidget);
        iconLabel->setAlignment(Qt::AlignCenter);
        iconLabel->setMinimumSize(48, 48); // 设置图标最小尺寸
        iconLabel->setMaximumSize(48, 48);
        iconLabels.append(iconLabel); // 添加到图标标签容器

        QPixmap temp(":/晴");
        iconLabel->setPixmap(
            temp.scaled(
                48,
                48, // 稍小于标签尺寸，留出边距
                Qt::KeepAspectRatio,
                Qt::SmoothTransformation
            )
        );

        // 添加到天的布局中
        dayLayout->addWidget(dayLabel);
        dayLayout->addWidget(iconLabel);
        dayLayout->addWidget(tempLabel);

        // 添加到主布局
        mainLayout->addWidget(dayWidget);
    }

    // 设置主布局
    this->setLayout(mainLayout);
}
void Day::set_color(QColor color)
{
    this->color = color;
}


void Day::handleWeatherData(const QVector<WeatherData> &weatherData)
{
    qDebug() << "按自然顺序:";
    for (const WeatherData &data : weatherData) {
        qDebug() << "星期:" << data.week
                 << "天气:" << data.type
                 << "高温:" << data.highTemp << "℃"
                 << "低温:" << data.lowTemp << "℃";
    }
    if(weatherData.isEmpty())
    {
        return;
    }
    //确保数据不超过7天
    int daysCount = qMin(weatherData.size(), 7);


    for(int i = 0; i < daysCount; i++) {
           const WeatherData &data = weatherData[i];

           // 更新日期标签 - 将数字转换为中文星期
           QString weekDay=data.week;

           if (i < dayLabels.size()) {
               dayLabels[i]->setText( weekDay);
           }

           // 更新温度标签
           if (i < tempLabels.size()) {
               QString tempText = QString("%1°C/%2°C").arg(data.highTemp).arg(data.lowTemp);
               tempLabels[i]->setText(tempText);
           }

           // 更新天气图标
           if (i < iconLabels.size()) {
               // 根据天气类型选择对应的图标

               QPixmap weatherIcon(getWeatherIconPath(data.type));
               if (!weatherIcon.isNull()) {
                   iconLabels[i]->setPixmap(
                       weatherIcon.scaled(
                           48,
                           48,
                           Qt::KeepAspectRatio,
                           Qt::SmoothTransformation
                       )
                   );
               } else {
                   // 如果图标不存在，使用默认图标或显示文字
                   qDebug() << "图标不存在:"  ;
               }
           }
           qDebug() << "Day" << i+1 << ": 星期" << weekDay
                    << data.highTemp << "°C/" << data.lowTemp << "°C"
                    << "天气:" << data.type;
       }

       // 如果数据不足7天，隐藏多余的widget
       for(int i = daysCount; i < dayWidgets.size(); i++) {
           if (i < dayWidgets.size()) {
               dayWidgets[i]->hide();
           }
       }
}
QString Day::getWeatherIconPath(const QString &weatherType)
{
    // 这里根据你的天气类型映射到对应的图标文件
    // 你需要根据实际的天气类型字符串来调整这个映射
    if (weatherType.contains("晴"))
    {
        return ":/晴";
    }
    else if (weatherType.contains("云") || weatherType.contains("阴") )
    {
        return ":/云";
    }
    else if (weatherType.contains("雨"))
    {
        return ":/雨";
    }
    else if (weatherType.contains("雪"))
    {
        return ":/雪";
    }
    else if (weatherType.contains("霾")||weatherType.contains("雾"))
    {
        return ":/雨";
    }
    else {
        return ":/默认"; // 默认图标
    }
}
void Day::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);

    // 创建 QPainter 对象
    QPainter painter(this);

    // 启用抗锯齿效果，使绘制更加平滑
    painter.setRenderHint(QPainter::Antialiasing);

    // 设置画笔颜色和宽度
    QPen pen;
    pen.setColor(this->color);  // 设置边框颜色为黑色
    pen.setWidth(0);  // 设置边框宽度
    painter.setPen(pen);

    // 设置画刷颜色
    QBrush brush;
    brush.setColor(this->color);  // 设置填充颜色为浅蓝色
    brush.setStyle(Qt::SolidPattern);
    painter.setBrush(brush);

    // 获取控件的矩形区域
    QRect rect = this->rect();

    // 绘制圆角矩形，rect 是控件的区域，设置圆角半径为 15
    painter.drawRoundedRect(rect, 15, 15);
}
